import CryptoJS from 'crypto-js'
  // 加密
  export function _encrypt(text, key){
    return CryptoJS.AES.encrypt(text, key, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    }).toString()
  }
  // 解密
  export function _decrypt(text, key) {
    return CryptoJS.AES.decrypt(text, key, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    }).toString(CryptoJS.enc.Utf8)
  }
  // 生成随机字符串
  export function _random_str(len) {
    len = len || 32
    const $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'
    const maxPos = $chars.length
    const random_str = ''
    for (i = 0; i < len; i++) {
      pwd += $chars.charAt(Math.floor(Math.random() * maxPos))
    }
    return random_str
  }
  /**
   * AES-CBC加密
   * @param data
   * @param key
   * @param iv
   */
  export function _cbc_encrypt(data, key, iv) {
    if (typeof data === 'object') {
      // 如果传入的data是json对象，先转义为json字符串
      try {
        data = JSON.stringify(data)
      } catch (error) {
        console.log('error:', error)
      }
    }
    // 统一将传入的字符串转成UTF8编码，这里的key一般是后端生成
    const dataHex = CryptoJS.enc.Utf8.parse(data) // 需要加密的数据
    const keyHex = CryptoJS.enc.Utf8.parse(key) // 秘钥
    const ivHex = CryptoJS.enc.Utf8.parse(iv) // 偏移量
    const encrypted = CryptoJS.AES.encrypt(dataHex, keyHex, {
      iv: ivHex,
      mode: CryptoJS.mode.CBC, // 加密模式
      padding: CryptoJS.pad.Pkcs7
    })
    const encryptedVal = encrypted.ciphertext.toString()
    return encryptedVal //  返回加密后的值
  }

  /**
   *  AES-CBC解密
   * @param data
   * @param key
   * @param iv
   * @returns
   */
  export function _cbc_decrypt(data, key, iv) {
    /*
    传入的key和iv需要和加密时候传入的key一致  
  */
    // 统一将传入的字符串转成UTF8编码
    const encryptedHexStr = CryptoJS.enc.Hex.parse(data)
    const srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr)
    const keyHex = CryptoJS.enc.Utf8.parse(key) // 秘钥
    const ivHex = CryptoJS.enc.Utf8.parse(iv) // 偏移量
    const decrypt = CryptoJS.AES.decrypt(srcs, keyHex, {
      iv: ivHex,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7
    })
    const decryptedStr = decrypt.toString(CryptoJS.enc.Utf8)
    return decryptedStr.toString()
  }
